// 定义会话存储接口
/* 会话存储接口定义了会话的保存、加载和删除操作
    可以切换不同的存储方式，如内存、文件、数据库等
    只需要实现SessionStorage接口，就可以切换不同的存储方式
    加载时自动检查并清理过期会话
*/
#pragma once
#include "Session.hpp"
#include <string>

namespace http
{
    namespace session
    {
        // 会话存储接口
        class SessionStorage
        {
        public:
            virtual ~SessionStorage() = default;                                      // 虚析构函数
            virtual void save(std::shared_ptr<Session> session) = 0;                  // 保存会话数据
            virtual std::shared_ptr<Session> load(const std::string &session_id) = 0; // 加载会话数据
            virtual void remove(const std::string &session_id) = 0;                   // 删除会话数据
        };
        // 内存会话存储类
        class MemorySessionStorage : public SessionStorage
        {
        public:
            void save(std::shared_ptr<Session> session) override;//保存会话数据
            std::shared_ptr<Session> load(const std::string &session_id) override;//加载会话数据
            void remove(const std::string &session_id) override;//删除会话数据

        private:
            std::unordered_map<std::string, std::shared_ptr<Session>> _sessions; // 会话数据存储
        };

    }
}